package io.tim.mvc_f2.helper;

import java.util.HashSet;
import java.util.Set;

import io.tim.mvc_f2.annotation.Service;
import io.tim.mvc_f2.util.ClassUtil;

/**
 * 类操作助手类
 *
 * @author zhangnan
 * @date 2017年3月10日
 *
 */
public final class ClassHelper {

	/**
	 * 定义类集合（用于存放所加载的类）
	 */
	private static final Set<Class<?>> CLASS_SET;

	static {
		String basePackage = ConfigHelper.getAppBasePackage();
		CLASS_SET = ClassUtil.getClassSet(basePackage);
	}

	/**
	 * 获取应用包名下的所有类
	 */
	public static Set<Class<?>> getClassSet() {
		return CLASS_SET;
	}

	/**
	 * 获取应用包名下所有 Service 类
	 */
	public static Set<Class<?>> getServiceClassSet() {
		Set<Class<?>> serviceClassSet = new HashSet<Class<?>>();
		for (Class<?> serviceClass : serviceClassSet) {
			if (serviceClass.isAnnotationPresent(Service.class))
				serviceClassSet.add(serviceClass);
		}
		return serviceClassSet;
	}
	
	/**
	 * 获取应用包名下所有 Controller 类
	 */
	public static Set<Class<?>> getControllerClassSet() {
		Set<Class<?>> controllerClassSet = new HashSet<Class<?>>();
		for (Class<?> controllerClass : controllerClassSet) {
			if (controllerClass.isAnnotationPresent(Service.class))
				controllerClassSet.add(controllerClass);
		}
		return controllerClassSet;
	}
	
	/**
	 * 获取包名下所有 Bean 类（包括：Service、Controller 等）
	 */
	public static Set<Class<?>> getBeanClassSet() {
		Set<Class<?>> beanClassSet = new HashSet<Class<?>>();
		beanClassSet.addAll(getServiceClassSet());
		beanClassSet.addAll(getControllerClassSet());
		
		return beanClassSet;
	}

}
